# # 设计一个ATM系统的程序，支持注册、登录、取款和存款功能。
# # 程序启动后，在控制台提示："欢迎使用华测 ATM，请输入需要进行的操作，例如，注册、登录、退出"

# 保存所有初始注册的用户信息，登录的时候可以进行数据匹配
users = [{'username': 'cendy', 'password': '123456', 'balance': 1000},
         {'username': 'cendy1', 'password': '123456', 'balance': 2000}]
# 保存当前登录的用户
login_user = None

def start():
    """
    启动函数
    :return: 无
    """
    while True:
        print("欢迎使用LL-ATM，请输入需要进行的操作，例如，注册、登录、退出")
        choice = input("请输入你的选择：")
        if choice == '登录':
            login()
        elif choice == '注册':
            reg()
        elif choice == '退出':
            print("欢迎下次光临！")
            break
        else:
            print("输入错误，请重新输入！")


def reg():
    """
    注册函数
        1)输入注册后，进入注册操作
        2)输入用户名，用户名不能重复注册，否则提示用户名重复，用户不能为空
        3)输入密码，密码长度大于 3，否则提示密码长度至少三位
        4)成功注册后，提示注册成功，余额默认为 0。
        5)支持注册多个用户
    :return:
    """
    is_succes =  False
    while not is_succes:
        username = input("请输入用户名：")
        if not username:
            print("用户名不能为空！")
            is_succes =  False
        else:
            # 判断注册的用户是否存在
            for user in users:
                if user['username'] == username:
                    print("用户名重复，请重新输入！")
                    is_succes =  False
                    break
                else:
                    is_succes =  True
    password = input("请输入密码：")
    while len( password) < 3:
        print("密码长度至少三位！")
        password = input("请输入密码：")
    user = {'username': username, 'password': password, 'balance': 0}
    users.append(user)
    print("------------注册成功！---------------")
    # 注册完成后，打印一个所有用户列表
    print("所有用户列表：")
    for i in users:
        print(i['username'])

def login():
    """
    登录函数
        1)用户通过输入用户名和密码进行登录。
        2)输入用户名，用户名不能为空
        3）输入密码，密码长度大于 3，否则提示密码长度至少三位
        4）登录成功后，显示用户余额和操作菜单（取款，存款，转账）；
        5）登录失败，给出相应错误提示，如 “用户名不存在” 或 “密码错误” 。
    :return:无
    """
    username = input("请输入用户名：")
    while not username:
        print("用户名不能为空")
        username = input("请输入用户名：")
    password = input("请输入密码：")
    while len( password) < 3:
        print("密码长度至少三位")
        password = input("请输入密码：")
    # 进行登录校验
    for user in users:
        if user['username'] == username and user['password'] == password:
            global login_user
            login_user = user
            print(f"登录成功，当前用户余额为：{user['balance']}")
            main()
            break
        else:
            print("用户名不存在或密码错误")


# ● 退出：输入退出，则退出程序



# 登录成功后的功能
def main():
    """
    主界面函数
    :return:无
    """
    while True:
        global login_user
        if login_user is None:
            print("请先登录！")
            return

        else:
            print(f"欢迎使用LL-ATM,当前用户为：{login_user['username']},余额为：{login_user['balance']}")
            print("1. 存款")
            print("2. 取款")
            print("3. 转账")
            print("4. 退出登录")
            choice = input("请输入你的选择(数字)：")
            if choice == '1':
                cu()
            elif choice == '2':
                qu()
            elif choice == '3':
                zh()
            elif choice == '4':
                login_user = None
                print("--------------退出登录成功！-------------------")



# ● 存款：
#   ○ 输入存款后，进入存款操作
#   ○ 输入存款金额，金额必须为大于 0 的数值。
#   ○ 存款成功后，显示用户余额和操作菜单（取款，存款，转账、退出登录）
def cu():
    """
    存款函数
        1)输入存款后，进入存款操作
        2)输入存款金额，金额必须为大于 0 的数值。
        3)存款成功后，显示用户余额和操作菜单（取款，存款，转账、退出登录）
    :return:无
    """
    while True:
        amount = input("请输入存款金额：")
        if not amount.isdigit():
            print('输入的金额格式有误！请重新输入！')
        else:
            money = int(amount)
            login_user['balance'] += money
            print(f"存款成功！当前余额为：{login_user['balance']}")
            break

# ● 取款：
#   ○ 输入取款后，进入取款操作。
#   ○ 输入取款金额，取款金额不能大于存款金额，否则给出提示，重新输入取款
#   ○ 取款成功后，显示用户余额和操作菜单（取款，存款，转账、退出登录）
def qu():
    """
    取款函数
        1)输入取款后，进入取款操作。
        2)输入取款金额，取款金额不能大于存款金额，否则给出提示，重新输入取款
        3)取款成功后，显示用户余额和操作菜单（取款，存款，转账、退出登录）
    :return:
    """
    while True:
        amount = input("请输入取款金额：")
        if not amount.isdigit():
            print('输入的取款金额格式有误！请重新输入！')
        else:
            money = int(amount)
            if money > login_user['balance']:
                print("取款金额超过当前余额！")
            else:
                login_user['balance'] -= money
                print(f"取款成功！当前余额为：{login_user['balance']}")
                break

def zh():
    """
        转账函数
    :return:
    """
    is_exist = False
    zh_name = ""
    while not is_exist:
        # 输入要转账的用户名
        zh_name = input("请输入要转账的用户名：")
        # 转账的用户是否存在
        if zh_name == login_user['username']:
            print("不能给自己转账,请重新输入转账用户！")
        else:
            for user in users:
                if user['username'] == zh_name:
                    zh_user = user
                    is_exist = True
                    break
            if not is_exist:
                print("用户不存在，请重新输入！")
    # 输入转账金额
    while True:
        money_str = input("请输入要转账的金额：")
        # money_str是是纯数，否则重新输入
        if not money_str.isdigit():
            print("输入的数字有误，请重新输入！")
        else:
            break
    money = int(money_str)
    # 判断余额是否充足
    if money <= login_user["balance"]:
        # 修改余额
        login_user["balance"] -= money
    else:
        print("余额不足，转账失败！")
        return  # 后面的处理不需要再执行
    # 收款人修改余额
    zh_user["balance"] += money
    # 打印所有用户信息
    for user in users:
        print(f'用户名为：{user["username"]}, 密码为：{user["password"]},余额为：{user["balance"]}')



# ● 退出登录
#   ○ 在控制台提示："欢迎使用华测 ATM，请输入需要进行的操作，例如，注册、登录、退出"







if __name__ == '__main__':
    start()
















